Current mainstream file systems organize files in storage by name in a directory tree structure. This creates many parent-child relationships between files and directories. Manipulating files and directories within this tree often involves acquiring multiple locks for each manipulation. Such locks are typically acquired to assure that updates are performed atomically. For example, moving a file from one directory to another typically includes acquiring three locks: one for the file itself, and one for each of the directories. Those three locks are held while the update operation is performed, including updates to the file and updates to the two directories.
File systems in which a manipulation can involve acquiring multiple locks typically use a lock hierarchy and/or deadlock detection. For example, if a file is to be moved from directory A to directory B and a different file is to be moved from directory B to directory A, the file system typically has rules in place to ensure these two operations do not deadlock with each other if they are attempted at the same time. Such rules can prevent or resolve deadlock situations, such as where one operation has acquired a lock of directory A and the other has acquired a lock of directory B, so that neither operation can proceed because neither can obtain locks of both directories.
Some file systems allow data to be organized and indexed by a finite number of attributes other than names. For example, some file systems allow data to be organized and indexed by multiple attributes, such as by name and by object identifier.